﻿#pragma once 
#include <opencv2/opencv.hpp>
#include <vector>

class TextureAnalyzer {
public:
    TextureAnalyzer(int medianBlurSize = 3,
        int verticalKernelSize = 15,
        int horizontalKernelSize = 20);

    cv::Mat processImage(const cv::Mat& inputImage);

    std::vector<float> getAngles() const { return _angles; }
    float getMeanAngle() const { return _meanAngle; }

private:
    cv::Mat removeShadow(const cv::Mat& img);
    cv::Mat removeIlluminationTrend(const cv::Mat& img);
    cv::Mat enhanceHorizontalTexture(const cv::Mat& img);
    cv::Mat skeletonize(const cv::Mat& binaryImg);
    void calculateAngles(const cv::Mat& skeleton);

private:
    int _medianBlurSize;
    int _verticalKernelSize;
    int _horizontalKernelSize;

    std::vector<float> _angles;
    float _meanAngle;
};
